package sessionBean;

import java.util.List;

import interfaceBeanRemote.SessionInvestisseurRemote;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import entityBean.Investisseur;
import entityBean.Startup;

/**
 * Session Bean implementation class SessionInvestisseur
 */
@Stateless
// (mappedName="InvestisseurBean")
public class SessionInvestisseur implements SessionInvestisseurRemote {

	@PersistenceContext(unitName = "EJB3_Entity")
	private EntityManager em;

	@PostConstruct
	public void init() {
		System.out.println("calling init method");
	}

	@PreDestroy
	public void cleanup() {
		System.out.println("calling cleanup method");
	}

	/**
	 * Default constructor.
	 */

	public SessionInvestisseur() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void addInvestisseur(Investisseur inv) {
		// TODO Auto-generated method stub
		em.persist(inv);
	}

	@Override
	public Investisseur findInvestisseur(int id) {
		// TODO Auto-generated method stub
		return em.find(Investisseur.class, id);
	}

	@Override
	public void removeInvestisseur(Investisseur inv) {
		// TODO Auto-generated method stub
		// if (findInvestisseur(inv.getIdInvestisseur()) != null)
		em.remove(inv);

	}

	@Override
	public int removeInvestisseurById(int id) {
		return em.createQuery(
				"DELETE FROM Investisseur i WHERE i.idInvestisseur = " + id)
				.executeUpdate();
	}

	@Override
	public void removeInvestisseurById2(int id) {
		em.remove(em.find(Investisseur.class, id));

	}

	@Override
	public void updateInvestisseur(Investisseur inv) {
		em.merge(inv);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Investisseur> getInvestisseurs() {
		// TODO Auto-generated method stub
		Query query = em.createQuery("SELECT c FROM Investisseur AS c"
				+ " ORDER BY c.idInvestisseur ASC");
		return query.getResultList();
	}

	@Override
	public Investisseur findInvestisseur_byName(String name) {
		Query query = em
				.createQuery("SELECT inv from investisseur as inv where inv.nom = '"
						+ name + "'");
		return (Investisseur) query.getSingleResult();
	}

	// @Override
	// public void devenirMenbreClub(int idclub) {
	//
	// return em.createQuery(
	// "UPDATE FROM Investisseur i WHERE i.idInvestisseur = " + id)
	// .executeUpdate();
	// }
	
	@Override
	public Integer getIdClubOfInvestiseur(int idInv) {
		// TODO Auto-generated method stub
		Query query = em
				.createQuery("SELECT i.club.idclub FROM Investisseur AS i "
						+ "WHERE idInvestisseur = " + idInv);
		return (Integer) query.getSingleResult();
	}

	@Override
	public void refresh(Investisseur inv) {
		// TODO Auto-generated method stub
		em.refresh(inv);
	}

	@Override
	public void flush() {
		// TODO Auto-generated method stub
		em.flush();
	}

}
